package mx.frantor.catalogos.daoimp;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;
import mx.frantor.catalogos.dao.InventarioProductosDAO;
import mx.frantor.catalogos.entitys.InventarioProductosEntity;
import mx.frantor.util.HibernateUtil;

public class InventariosProductosDAOImpl implements InventarioProductosDAO{

	@Override
	public String agregarInventarioProductos(
			InventarioProductosEntity nuevoInventarioProductos) {
		String e = "";
		Session session = HibernateUtil.getSessionFactory()
				.getCurrentSession();
		
		session.beginTransaction();
		try {
		session.save(nuevoInventarioProductos);
		session.flush();
		session.getTransaction().commit();
		e = nuevoInventarioProductos.getIdProducto().toString();
		} catch (Exception x) {
			//e.printStackTrace();
			session.getTransaction().rollback();
			e = x.getMessage();
			//return e.toString();
		}
		HibernateUtil.getSessionFactory().getCurrentSession().close();

		System.out.println("agregar inventario productos resultado " + e);

		return e;
	}

	@Override
	public String modificarInventarioProductos(
			InventarioProductosEntity modificarInventarioProductos) {
		String e = "";
		Session session = HibernateUtil.getSessionFactory()
				.getCurrentSession();
	
		session.beginTransaction();
		try {
			InventarioProductosEntity invProdsTemp = (InventarioProductosEntity) session.get(
					InventarioProductosEntity.class, modificarInventarioProductos.getIdProducto());
		session.flush();
		session.evict(invProdsTemp);
		session.update(modificarInventarioProductos);
		session.getTransaction().commit();
		} catch (Exception x) {
			//e.printStackTrace();
			session.getTransaction().rollback();
			e = x.getMessage();
			//return e.toString();
		}
		HibernateUtil.getSessionFactory().getCurrentSession().close();
		System.out.println("modificar inventario productos resultado " + e);

		return e;
	}

	@Override
	public String eliminarInventarioProductos(Long idProductos) {
		String e = "";
		Session session = HibernateUtil.getSessionFactory()
				.getCurrentSession();
			// TODO Auto-generated method stub			
			session.beginTransaction();
			try {
				InventarioProductosEntity invProdsElimina = (InventarioProductosEntity) session.get(
						InventarioProductosEntity.class, idProductos);
			session.delete(invProdsElimina);
			session.getTransaction().commit();
			//HibernateUtil.getSessionFactory().getCurrentSession().close();
		} catch (Exception x) {
			//e.printStackTrace();
			session.getTransaction().rollback();
			//HibernateUtil.getSessionFactory().getCurrentSession().close();
			e = x.getMessage();
			//return e.toString();
		}
		HibernateUtil.getSessionFactory().getCurrentSession().close();
		System.out.println("eliminar inventario productos resultado " + e);

		return e;
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<InventarioProductosEntity> getTodosInventarioProductosActivos() {
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		List<InventarioProductosEntity> inventarios = session.createCriteria(InventarioProductosEntity.class).list();
		HibernateUtil.getSessionFactory().getCurrentSession().close();
		return inventarios;
	}

	@SuppressWarnings("unchecked")
	@Override
	public InventarioProductosEntity getInventarioProductosId(Long idProductos) {
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		List<InventarioProductosEntity> invent = (List<InventarioProductosEntity>) session.createCriteria(
				InventarioProductosEntity.class).add(Restrictions.eq("IdProducto", idProductos))
				.setFetchSize(1).list();
		HibernateUtil.getSessionFactory().getCurrentSession().close();
		if(invent==null){
			return null;
		}else{
			return invent.get(0);
		}
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<InventarioProductosEntity> getInventarioProductosPorId(
			Long idProductos) {
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		List<InventarioProductosEntity> invent = (List<InventarioProductosEntity>) 
				session.createCriteria(InventarioProductosEntity.class)
				.add(Restrictions.eq("IdProducto", idProductos))
				.list();
		HibernateUtil.getSessionFactory().getCurrentSession().close();
		return invent;
	}

}
